package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

    //求总条数
    @Override
    public Integer count() {
        return empMapper.count();
    }

    //求当前那一页
    @Override
    public PageBean<Emp> page(Integer page, Integer pageSize) {

        //需要返回给页面的bean对象
        PageBean<Emp> pageBean = new PageBean<>();

        //用当前页数，计算出limit中起始索引的值
         /* 分页查询:limit结果限制关键字
    select  字段列表  from   表名  limit  起始索引, 查询记录数 ;

    select * from tableName limit (pageNum-1)*pageSize,pageSize;

    注意:
    1.起始索引从0开始，起始索引 = （查询页码pageNum - 1）* 每页显示记录数pageSize。
    2.分页查询是数据库的方言，不同的数据库有不同的实现，MySQL中是LIMIT。
    3.如果查询的是第一页数据，起始索引可以省略，直接简写为 limit 10。*/
        int start = (page - 1) * pageSize;
        List<Emp> thisPage = empMapper.page(start, pageSize);
        pageBean.setRows(thisPage);

        //获取一共多少条
        Integer count = count();
        pageBean.setTotal((long) count);

        return pageBean;
    }

    //使用分页插件pagehelper实现分页查询
    @Override
    public PageBean<Emp> page2(Integer page, Integer pageSize) {

        PageHelper.startPage(page, pageSize);//使用指定页数,每次条数开启分页查询
        List<Emp> empList = empMapper.list();//查询所有,但返回的结果是指定的那一页的数据
        System.out.println(empList);

        Page<Emp> p = (Page<Emp>) empList;//将返回的一页数据强转成分页插件提供的page对象

        System.out.println("============");
        System.out.println(p);//Page{count=true, pageNum=2, pageSize=3, startRow=3, endRow=6, total=17, pages=6, reasonable=false, pageSizeZero=false}[Emp(id=4, username=weiyixiao, password=123456, name=韦一笑, gender=1, image=4.jpg, job=2, entrydate=2007-01-01, deptId=2, createTime=2023-04-14T08:43, updateTime=2023-04-14T08:43), Emp(id=5, username=changyuchun, password=123456, name=常遇春, gender=1, image=5.jpg, job=2, entrydate=2012-12-05, deptId=2, createTime=2023-04-14T08:43, updateTime=2023-04-14T08:43), Emp(id=6, username=xiaozhao, password=123456, name=小昭, gender=2, image=6.jpg, job=3, entrydate=2013-09-05, deptId=1, createTime=2023-04-14T08:43, updateTime=2023-04-14T08:43)]
        System.out.println(p.getTotal());//17
        List<Emp> result = p.getResult();
        for (Emp emp : result) {
            System.out.println(emp);
            //Emp(id=4, username=weiyixiao, password=123456, name=韦一笑, gender=1, image=4.jpg, job=2, entrydate=2007-01-01, deptId=2, createTime=2023-04-14T08:43, updateTime=2023-04-14T08:43)
            //Emp(id=5, username=changyuchun, password=123456, name=常遇春, gender=1, image=5.jpg, job=2, entrydate=2012-12-05, deptId=2, createTime=2023-04-14T08:43, updateTime=2023-04-14T08:43)
            //Emp(id=6, username=xiaozhao, password=123456, name=小昭, gender=2, image=6.jpg, job=3, entrydate=2013-09-05, deptId=1, createTime=2023-04-14T08:43, updateTime=2023-04-14T08:43)
        }
        System.out.println("============");

        //生成返回类型
        PageBean<Emp> pageBean = new PageBean<>();
        pageBean.setTotal(p.getTotal());//设置总数目
        pageBean.setRows(p.getResult());//设置数据

        return pageBean;
    }


    //使用分页插件pagehelper实现分页查询,但返回值是pagehelper提供的PageInfo<Emp>而不再是自定义的PageBean类型
    @Override
    public PageInfo<Emp> page3(Integer page, Integer pageSize) {

        PageHelper.startPage(page, pageSize);//使用指定页数,每次条数开启分页查询
        List<Emp> empList = empMapper.list();//查询所有,但返回的结果是指定的那一页的数据
        PageInfo<Emp> empPageInfo = new PageInfo<>(empList);//将查询到的一页数据封装成pagehelper提供的PageInfo<Emp>类型,当中有分页相关的所有信息,返回给前端,前端便可以获得分页相关的所有信息
        return empPageInfo;
    }


    //使用分页插件pagehelper实现分页查询,返回值是pagehelper提供的PageInfo<Emp>类型,同时实现"条件分页查询"
    @Override
    public PageInfo<Emp> page4(Integer page, Integer pageSize, Emp conditionEmp, Date begin, Date end) {

        PageHelper.startPage(page, pageSize);//表示需要分页,并告知页数,和每页大小
        List<Emp> empList = empMapper.listWithCondition(conditionEmp, begin, end);
        return new PageInfo<>(empList);

    }

    @Override
    public void delete(List<Integer> ids) {
        empMapper.delete(ids);
    }
}
